package Repositorio;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import erro.ConexaoException;
import erro.RepositorioException;
import ClassesBasicas.Copa;
import Conexao.*;

/**
 * Camada de acesso aos dados de Copa no modelo DAO 
 * 	
 * @author Natalie
 *
 */

public class RepCopa implements IRepCopa {

	/* Representa o GConexao */
	private IConexao conexao;
	
	/**Quando o objeto RepCopa for instanciado
	 * este construtor ir� instanciar o GConexao
	 * com uma Singleton da GConexao 
	 **/
	 
	public RepCopa() {
		conexao = GConexao.getInstancia();
	}
	
	/**
	 *  Insere uma Copa no Banco de Dados
	 *  @throws ConexaoException, RepositorioException
	 *  @param Copa
	 */
	
public void salvar(Copa cop) throws ConexaoException, RepositorioException {
                Connection c = conexao.conectar();
                
                String sqlSalvarCop = "INSERT INTO Copa(nome_Copa, ano_Copa, campeao_Copa, vice_Copa) values(?,?,?,?)";
                try{
                        PreparedStatement pstm = c.prepareStatement(sqlSalvarCop);
                       
			pstm.setString(1,cop.getNomeCopa());
                        pstm.setInt(2, cop.getAnoCopa());
			pstm.setString(3, cop.getCampeao());
			pstm.setString(4, cop.getVice());
                        pstm.executeUpdate();
                        pstm.close();
                }
                catch(SQLException e){
                        throw new RepositorioException(e.getMessage());
                }
                finally{
                        conexao.desconectar(c);
                }
        }
		
		/**
         * Consulta uma Copa pelo c�digo
         * @throws ConexaoException,RepositorioException
         * @return Copa
		 */
        
        public Copa consultar(int codCopa) throws ConexaoException,RepositorioException {
                Copa a = null;
                
                Connection c = conexao.conectar();
                
                String sqlConsultCopById = "SELECT cod_Copa,nome_Copa,ano_Copa,campeao_Copa,vice_Copa FROM Copa WHERE(cod_Copa = ?) ";
                
                try {
                        PreparedStatement pstm = c.prepareStatement(sqlConsultCopById);
                        pstm.setInt(1,codCopa);
                        ResultSet result = pstm.executeQuery();
                        
                        if(result.next()){
                                a = new Copa();
                                a.setCodCopa(result.getInt("codCopa"));
								a.setNomeCopa(result.getString("NomeCopa"));
                                a.setAnoCopa(result.getInt("anoCopa"));
                                a.setCampeao(result.getString("campeaoCopa"));
                        }
                        
                } catch (SQLException e) {
                        throw new RepositorioException(e.getMessage());
                }
                finally{
                        conexao.desconectar(c);
                }
                
                return a;
        }

		/**
         * Consulta a Copa pelo nome
         * @throws ConexaoException,RepositorioException
         * @return NomeCopa
         * 
         */
        
      public Copa consultar(String nomeCopa) throws ConexaoException,RepositorioException {
                Copa a = null;
                
                Connection c = conexao.conectar();
                
                String sqlConsultCopById = "SELECT cod_Copa,nome_Copa,ano_Copa,campeao_Copa,vice_Copa FROM Copa WHERE(nome_Copa = ?) ";
                
                try {
                        PreparedStatement pstm = c.prepareStatement(sqlConsultCopById);
                        pstm.setString(1,nomeCopa);
                        ResultSet resut = pstm.executeQuery();
                        
                        if(resut.next()){
                        	a = new Copa();
                        	a.setCodCopa(resut.getInt("codCopa"));
                        	a.setNomeCopa(resut.getString("nomeCopa"));
                        	a.setAnoCopa(resut.getInt("anoCopa"));
                        }
                        
                } catch (SQLException e) {
                        throw new RepositorioException(e.getMessage());
                }
                finally{
                        conexao.desconectar(c);
                }
                
                return a;
        }
		
		/**
         * Exclui a Copa pelo c�digo
         * @param int
         * @return void
         * @throws ConexaoException,RepositorioException
         */
        
       public void excluir(int codCopa) throws ConexaoException,RepositorioException  {
                
                Connection c = conexao.conectar();
                
                String sqlExcluirCop = "DELETE FROM Copa WHERE(cod_Copa = ?)";
                
                try {
                        PreparedStatement pstm = c.prepareStatement(sqlExcluirCop);
                        pstm.setInt(1, codCopa);
                        pstm.executeUpdate();
                        pstm.close();
                } catch (SQLException e) {
                        throw new RepositorioException(e.getMessage());
                }
                finally{
                        conexao.desconectar(c);
                }

        }
 
        /**
         * Exclui uma Copa pelo nome
         * @param String
         * @return void
         * @throws ConexaoException,RepositorioException
         */
        
        public void excluir(String nomeCopa) throws ConexaoException,RepositorioException{
                
                Connection c = conexao.conectar();
                
                String sqlExcluirCop = "DELETE FROM Copa WHERE(nome_Copa = ?)";
                
                try {
                        PreparedStatement pstm = c.prepareStatement(sqlExcluirCop);
                        pstm.setString(1, nomeCopa);
                        pstm.executeUpdate();
                        pstm.close();
                } catch (SQLException e) {
                        throw new RepositorioException(e.getMessage());
                }
                finally{
                        conexao.desconectar(c);
                }
        }       
		
		
        /**
         * Lista todos as Copas
         * @return Collection<Copa>
         * @throws ConexaoException,RepositorioException
         */
        
      public Collection<Copa> listar() throws ConexaoException,RepositorioException {
                Copa cp = null; 
                ArrayList<Copa> lista = new ArrayList<Copa>();
                
                Connection c = conexao.conectar();
                
                String sqlListaCop = "SELECT cod_Copa, nome_Copa, ano_Copa FROM Copa";
                
                try {
                        PreparedStatement pstm = c.prepareStatement(sqlListaCop);
                        ResultSet resut = pstm.executeQuery();
                        
                        while(resut.next()){
                        	cp = new Copa();
                        	cp.setCodCopa(resut.getInt(1));
                        	cp.setNomeCopa(resut.getString(2));
                        	cp.setAnoCopa(resut.getInt(4));
                        	lista.add(cp);
                        }
                } catch (SQLException e) {
                        throw new RepositorioException(e.getMessage());
                }
                finally{
                        conexao.desconectar(c);
                }
                return lista;
        }

}
		
		